package com.walming.generator.copycat.annotaion;

import com.walming.generator.copycat.enums.ColumnNamingStrategy;
import com.walming.generator.copycat.enums.HandleOrderByEnum;
import com.walming.generator.copycat.enums.OrderByEnum;

import java.lang.annotation.*;

/**
 * 排序(ORDER BY) 条件注解
 *
 * @author walming
 * @date 2020-02-16 09:10
 */
@Documented
@CriteriaQuery
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface OrderBy {

    /** 自定义的属性值（数据库字段名） */
    String alias() default "";

    /** 排序方向（默认ASC） */
    OrderByEnum orderBy() default OrderByEnum.ASC;

    /** 数据库字段命名策略（默认小写字母 && 下划线） */
    ColumnNamingStrategy naming() default ColumnNamingStrategy.LOWER_CASE_UNDER_LINE;

    /**
     * 排序字段的类型
     * STATIC: 静态排序 - 只要包含了 {@link OrderBy} 注解的字段均参与排序
     * DYNAMIC: 动态排序 - 包含了 {@link OrderBy} 注解的字段，且前端传了值的字段将参与排序
     */
    HandleOrderByEnum handleType() default HandleOrderByEnum.STATIC;

}
